A storage server is a special-purpose processing system that is used to store and retrieve data on behalf of one or more client processing systems (“clients”). Storage servers are commonly used for a variety of purposes, such as providing multiple users with access to shared data and backing up critical data (e.g., by data mirroring).
A file server is an example of a storage server, which operates on behalf of one or more clients to store and manage shared files in a set of mass storage devices, such as magnetic or optical disks or tapes. The mass storage devices may be organized into one or more volumes of a Redundant Array of Inexpensive Disks (RAID). A file server which is designed as an appliance for use in a network attached storage (NAS) environment is sometimes referred to as “filer”; enterprise-level filers are made by Network Appliance, Inc. of Sunnyvale, Calif. Another type of storage server is a device which provides clients with block-level access to stored data, rather than file-level access. This type of storage server is often used to implement storage area networks (SANs). Other storage servers are capable of providing clients with either file-level access or block-level access. Certain Filers made by Network Appliance have this capability.
With storage servers, as with most other types of modern processing systems, it is desirable to be able to install new software or to upgrade the existing software in a way that is convenient for the user. A well-known way to install software in a conventional processing system is to insert a removable storage medium that contains the software (e.g., a disk, CD-ROM, DVD or the like) into the processing system and run a conventional installer program. Another popular method is to download the software from a remote server over a network, such as the Internet. The latter method is often more convenient, especially if the software is updated frequently.
With a complex processing system, particularly an enterprise-level storage system, it is common for software upgrades to be produced frequently. Therefore, the network download approach is generally the preferred method of installing new or updated software in such systems. However, current download techniques have a number of shortcomings.
For example, one known process for upgrading software in an enterprise-level filer is as follows. First, the customer/user (hereinafter “user”) downloads, from a remote server of the manufacturer, a “download package” that consists of archived and compressed files (e.g., tar or zip) containing the upgrade. The package is then uncompressed and un-archived on the filer, either manually or automatically in response to a command. The user then inputs a command to the filer to copy the new software into non-volatile memory (e.g., Compact Flash) and the hard-drive boot sectors of the filer. Finally, the user reboots the filer to complete the process.
Although this process generally works well, it has several limitations. First, the user has to go through multiple steps. This is not only laborious, but there is also a high possibility for user error. Also, the package format is too simple to involve any additional system-specific data. Therefore, no checks can be performed on the package before installing it. So, if the user is inadvertently trying to install a package that is not meant for the particular platform being used, the current process will not stop him from doing so. This could result in damage to the filer. Furthermore, the files in the package are not individually checksummed. Consequently, there is a chance that accidental/voluntary bit flips can go unnoticed. In addition, if the user is performing a procedure that requires a special command, such as a software downgrade, there is no ability to inform the user that the command is required. Furthermore, there is no file locking during installation of the package contents, which could lead to synchronization issues. Also, there is no mechanism to assure the user that the package is in fact made by the manufacturer of the filer.
There are download package managers available which may address some of these issues, such as Red Hat's RPM and Debian's apt_get. However, these are user-space programs, which are difficult to port to the kernel-space such as used in a Filer or other enterprise-level storage system. Moreover, it is difficult if not impossible to tune these package managers to the specific implementation and requirements of a particular storage system.
What is needed, therefore, is an improved software download technique and mechanism which overcomes these limitations.